package plp.orientadaObjetos2.declaracao.funcao;

import plp.expressions2.memory.VariavelJaDeclaradaException;
import plp.expressions2.memory.VariavelNaoDeclaradaException;
import plp.orientadaObjetos1.declaracao.procedimento.ListaDeclaracaoParametro;
import plp.orientadaObjetos1.excecao.declaracao.ClasseJaDeclaradaException;
import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException;
import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoJaDeclaradoException;
import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoNaoDeclaradoException;
import plp.orientadaObjetos1.expressao.leftExpression.Id;
import plp.orientadaObjetos1.memoria.AmbienteCompilacaoOO1;
import plp.orientadaObjetos1.util.Tipo;
import plp.orientadaObjetos2.memoria.FuncaoJaDeclaradaException;

public interface DecFuncao {

	Tipo getTipoRetorno();

	Id getNome();

	ListaDeclaracaoParametro getParametrosFormais();

	boolean checaTipo(AmbienteCompilacaoOO1 ambiente) throws VariavelJaDeclaradaException,
														VariavelNaoDeclaradaException,
														ProcedimentoJaDeclaradoException,
														ProcedimentoNaoDeclaradoException,
														ClasseJaDeclaradaException,
														ClasseNaoDeclaradaException,
														FuncaoJaDeclaradaException;
}
